#include <ros/ros.h>
#include <Ros/person.h>

int main(int argc, char *argv[])
{
    setlocale(LC_ALL,""); //防止中文乱码
    ros::init(argc,argv,"talker"); //初始化节点，节点名称为talker
    ROS_INFO("发布者的消息");
    ros::NodeHandle nh; //创建节点句柄

    /**
     * 实例化 发布者 对象
     * 泛型(模板) : 自定义的person.msg
     * 参数1：要发布的话题
     * 参数2：队列中最大保存的消息数，超出此阀值时，先进的先销毁
     */
    ros::Publisher pub = nh.advertise<Ros::person>("person_s_information",10);

    /* 创建被发布的数据(类似一种结构？) */
    Ros::person myself;
    /*设置发布的各项数据*/
    myself.name = "qyt";
    myself.height = 152.0;
    myself.weight = 0.0108*myself.height*myself.height - 
    3.1034*myself.height + 273.1019;

    ros::Rate rate(2); //设置发布速率
    ros::Duration(3).sleep(); //休眠数秒让ros master能够来得及注册发布者和订阅者信息

    while (ros::ok()) //当节点还存在时
    {
        /* 发布消息，并输出发布日志 */
        pub.publish(myself);
        ROS_INFO("发布者发出的消息：姓名：%s , 身高：%1f cm，标准体重：%2f kg", myself.name.c_str(), myself.height, myself.weight);

        /* 对发布的消息做处理 */
        myself.height += 0.2;
        myself.weight = 0.0108*myself.height*myself.height - 3.1034*myself.height + 273.1019;

        rate.sleep();
        ros::spinOnce();
    }
    
    return 0;
}
